package com.agile.leetcode.easy.longestNiceSubstring;

/**
 * 当一个字符串 s 包含的每一种字母的大写和小写形式 同时 出现在 s 中，就称这个字符串 s 是 美好 字符串。比方说，"abABB" 是美好字符串，因为 'A' 和 'a' 同时出现了，且 'B' 和 'b' 也同时出现了。然而，"abA" 不是美好字符串因为 'b' 出现了，而 'B' 没有出现。
 * <p>
 * 给你一个字符串 s ，请你返回 s 最长的 美好子字符串 。如果有多个答案，请你返回 最早 出现的一个。如果不存在美好子字符串，请你返回一个空字符串。
 * <p>
 *  
 * <p>
 * 示例 1：
 * <p>
 * 输入：s = "YazaAay"
 * 输出："aAa"
 * 解释："aAa" 是一个美好字符串，因为这个子串中仅含一种字母，其小写形式 'a' 和大写形式 'A' 也同时出现了。
 * "aAa" 是最长的美好子字符串。
 * 示例 2：
 * <p>
 * 输入：s = "Bb"
 * 输出："Bb"
 * 解释："Bb" 是美好字符串，因为 'B' 和 'b' 都出现了。整个字符串也是原字符串的子字符串。
 * 示例 3：
 * <p>
 * 输入：s = "c"
 * 输出：""
 * 解释：没有美好子字符串。
 * 示例 4：
 * <p>
 * 输入：s = "dDzeE"
 * 输出："dD"
 * 解释："dD" 和 "eE" 都是最长美好子字符串。
 * 由于有多个美好子字符串，返回 "dD" ，因为它出现得最早。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/longest-nice-substring
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @Author:ChenZhangKun
 * @Date: 2021/3/24 14:06
 */
public class LongestNiceSubstring {
    public static void main(String[] args) {
        LongestNiceSubstring niceSubstring = new LongestNiceSubstring();
        String substring = niceSubstring.longestNiceSubstring("abABB");
        System.out.println(substring);
    }

    public String longestNiceSubstring(String s) {
        // 将其转换为数组
        if (s == null || s == "") return "";
        // 定义最长最好子字符串
        String niceStr = "";
        // 遍历
        for (int i = 0; i < s.length(); i++) {
            // 先截取全部
            String substring = s.substring(i);
            if (isNiceSubstring(substring)) {
                // 拿到长度
                int length1 = substring.length();
                if (length1 > niceStr.length()) {
                    niceStr = substring;
                }
            }
            for (int j = i + 1; j < s.length(); j++) {
                // 截取
                String substring1 = s.substring(i, j);
                // 是否是
                if (isNiceSubstring(substring1)) {
                    if (substring1.length() > niceStr.length()) {
                        niceStr = substring1;
                    }
                }
            }
        }
        return niceStr;
    }

    /**
     * 判断是否是nice字符串
     *
     * @param str
     * @return
     */
    public boolean isNiceSubstring(String str) {
        // 转换为字符数组
        char[] chars = str.toCharArray();
        // 遍历字符
        for (char c : chars) {
            // 转为字符串
            String charStr = c + "";
            // 是大写还是小写
            if (97 <= c && c <= 122) {
                // 小写，转为大写
                String s = charStr.toUpperCase();
                if (!str.contains(s)) {
                    return false;
                }
            }
            if (65 <= c && c <= 90) {
                // 大写，转为小写
                String s = charStr.toLowerCase();
                if (!str.contains(s)) {
                    return false;
                }
            }
        }
        return true;
    }
}
